大家好,這裡是 A Fei,今天是鐵人賽開賽第二天,也是連假開始前的小週末,在這先祝各位讀者中秋佳節愉快!
可能有人已經注意到,標題我借用了遊戲《Persona 5》的知名台詞。在遊戲中,主角一行人遭逢逆境,卻不甘屈服命運,傾聽心中「另一個我」的心聲,覺醒力量後化身「怪盜團」與惡人對抗,對比正在為轉職奮鬥的我,心境上頗為類似,也藉此勉勵自己不要輕易放棄,莫忘初衷。說個題外話,《Persona 5》的爵士風格音樂非常好聽,在此也推薦給大家。
蛤?你問我說了這麼多,那跟今天的題目有什麼關聯性?其實,今天的題目就叫做「
Are they the "same"?」
什麼?你說關聯性很牽強,啊...讓我們直接看題目:
Given two arrays a and b write a function comp(a, b) (orcompSame(a, b)) that checks whether the two arrays have the "same" elements, with the same multiplicities. "Same" means, here, that the elements in b are the elements in a squared, regardless of the order.
Examples
Valid arrays
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
Invalid arrays
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
Remarks
a or b might be [] or {} (all languages except R, Shell).
a or b might be nil or null or None or nothing (except in C++, Elixir, Haskell, PureScript, Pascal, Perl, R, Rust, Shell).
If a or b are nil (or null or None, depending on the language), the problem doesn't make sense so return false.
題目難度:6 kyu
是否有在時限內回答正確:是
題目很長,我省略了裡面一部分的解釋。簡單來說,題目要我們比較 a、b 兩個陣列,b 陣列中的每個數字,要等於 a 陣列每個數字的平方(不管排列順序),而且 a、b 有可能是 [] 或 {}、nil 或 null。解題重點如下:
我最後的答案如下:
def comp(array1, array2)
if !array1.nil? and !array2.nil?
array2.map { |e| Math.sqrt(e) }.sort.hash == array1.map { |e| e.to_f }.sort.hash
else
false
end
end
對比評分最高的解答:
def comp(array1, array2)
return false if array1.nil? || array2.nil?
array1.map {|num| num ** 2}.sort == array2.sort
end
可以看到我程式碼寫得比較囉嗦外,大致上邏輯是常不多的,只是我「給敖」用了 hash 方法去比較兩個陣列,其實只要用 == 就可以了。還有,為了避免有些數字開平方會有小數,我還「貼心地」用 to_f 方法將每個整數轉為浮點數,好讓它們可以互相比較,結果只是白操心。
好啦,修行篇第二話就寫到這,我要繼續趕專案進度了,各位 bye~